\subsection{函数式 API}\label{model-api}
\subsubsection{Model 类 API}

在函数式 API 中，给定一些输入张量和输出张量，可以通过以下方式实例化一个
\texttt{Model}：

\begin{Shaded}
\begin{Highlighting}[]
\ImportTok{from} \NormalTok{keras.models }\ImportTok{import} \NormalTok{Model}
\ImportTok{from} \NormalTok{keras.layers }\ImportTok{import} \NormalTok{Input, Dense}

\NormalTok{a }\OperatorTok{=} \NormalTok{Input(shape}\OperatorTok{=}\NormalTok{(}\DecValTok{32}\NormalTok{,))}
\NormalTok{b }\OperatorTok{=} \NormalTok{Dense(}\DecValTok{32}\NormalTok{)(a)}
\NormalTok{model }\OperatorTok{=} \NormalTok{Model(inputs}\OperatorTok{=}\NormalTok{a, outputs}\OperatorTok{=}\NormalTok{b)}
\end{Highlighting}
\end{Shaded}

这个模型将包含从 \texttt{a} 到 \texttt{b} 的计算的所有网络层。

在多输入或多输出模型的情况下，你也可以使用列表：

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{model }\OperatorTok{=} \NormalTok{Model(inputs}\OperatorTok{=}\NormalTok{[a1, a2], outputs}\OperatorTok{=}\NormalTok{[b1, b3, b3])}
\end{Highlighting}
\end{Shaded}

有关 \texttt{Model} 的详细介绍，请阅读
\hyperref[functional-api-guide]{Keras 函数式 API 指引}。

\subsubsection{Model
的实用属性}

\begin{itemize}
\tightlist
\item
  \texttt{model.layers} 是包含模型图的层的展平的列表。
\item
  \texttt{model.inputs} 是输入张量的列表。
\item
  \texttt{model.outputs} 是输出张量的列表。
\end{itemize}

\subsubsection{Model
类模型方法}\label{model-ux7c7bux6a21ux578bux65b9ux6cd5}

\subsubsubsection{compile}\label{compile}

\begin{Shaded}
\begin{Highlighting}[]
\BuiltInTok{compile}\NormalTok{(}\VariableTok{self}\NormalTok{, optimizer, loss, metrics}\OperatorTok{=}\VariableTok{None}\NormalTok{, loss_weights}\OperatorTok{=}\VariableTok{None}, \\
\hspace{1cm}\NormalTok{sample_weight_mode}\OperatorTok{=}\VariableTok{None}\NormalTok{, weighted_metrics}\OperatorTok{=}\VariableTok{None}\NormalTok{, target_tensors}\OperatorTok{=}\VariableTok{None}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

用于配置训练模型。

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{optimizer}: 字符串（优化器名）或者优化器对象。 详见
  \hyperref[optimizers]{optimizers}。
\item
  \textbf{loss}: 字符串（目标函数名）或目标函数。 详见
  \hyperref[losses]{losses}。
  如果模型具有多个输出，则可以通过传递损失函数的字典或列表，在每个输出上使用不同的损失。
  模型将最小化的损失值将是所有单个损失的总和。
\item
  \textbf{metrics}: 在训练和测试期间的模型评估标准。 通常你会使用
  \texttt{metrics\ =\ {[}\textquotesingle{}accuracy\textquotesingle{}{]}}。
  要为多输出模型的不同输出指定不同的评估标准，还可以传递一个字典，如
  \texttt{metrics\ =\ \{\textquotesingle{}output\_a\textquotesingle{}：\textquotesingle{}accuracy\textquotesingle{}\}}。
\item
  \textbf{loss\_weights}: 可选的指定标量系数（Python
  浮点数）的列表或字典，用以衡量损失函数对不同的模型输出的贡献。
  模型将最小化的误差值是由 \texttt{loss\_weights} 系数加权的
  \emph{加权总和} 误差。 如果是列表，那么它应该是与模型输出相对应的 1：1
  映射。 如果是张量，那么应该把输出的名称（字符串）映到标量系数。
\item
  \textbf{sample\_weight\_mode}:
  如果你需要执行按时间步采样权重（2D权重），请将其设置为
  \texttt{temporal}。 默认为 \texttt{None}，为采样权重（1D）。
  如果模型有多个输出，则可以通过传递 mode
  的字典或列表，以在每个输出上使用不同的 \texttt{sample\_weight\_mode}。
\item
  \textbf{weighted\_metrics}: 在训练和测试期间，由 sample\_weight 或
  class\_weight 评估和加权的度量标准列表。
\item
  \textbf{target\_tensors}: 默认情况下，Keras
  将为模型的目标创建一个占位符，在训练过程中将使用目标数据。
  相反，如果你想使用自己的目标张量（反过来说，Keras
  在训练期间不会载入这些目标张量的外部 Numpy 数据）， 您可以通过
  \texttt{target\_tensors} 参数指定它们。
  它可以是单个张量（单输出模型），张量列表，或一个映射输出名称到目标张量的字典。
\item
  \_\_**kwargs\_\_: 当使用 Theano/CNTK 后端时，这些参数被传入
  \texttt{K.function}。 当使用 TensorFlow 后端时，这些参数被传递到
  \texttt{tf.Session.run}。
\end{itemize}

\textbf{异常}

\begin{itemize}
\tightlist
\item
  \textbf{ValueError}: 如果 \texttt{optimizer}, \texttt{loss},
  \texttt{metrics} 或 \texttt{sample\_weight\_mode} 这些参数不合法。
\end{itemize}



\subsubsubsection{fit}\label{fit}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{fit(}\VariableTok{self}\NormalTok{, x}\OperatorTok{=}\VariableTok{None}\NormalTok{, y}\OperatorTok{=}\VariableTok{None}\NormalTok{, batch_size}\OperatorTok{=}\VariableTok{None}\NormalTok{, epochs}\OperatorTok{=}\DecValTok{1}\NormalTok{, verbose}\OperatorTok{=}\DecValTok{1}\NormalTok{, callbacks}\OperatorTok{=}\VariableTok{None}, \\
\hspace{1cm}\NormalTok{validation_split}\OperatorTok{=}\FloatTok{0.0}\NormalTok{, validation_data}\OperatorTok{=}\VariableTok{None}\NormalTok{, shuffle}\OperatorTok{=}\VariableTok{True}, \\
\hspace{1cm}\NormalTok{class_weight}\OperatorTok{=}\VariableTok{None}\NormalTok{, sample_weight}\OperatorTok{=}\VariableTok{None}\NormalTok{, initial_epoch}\OperatorTok{=}\DecValTok{0}\NormalTok{, steps_per_epoch}\OperatorTok{=}\VariableTok{None}, \\
\hspace{1cm}\NormalTok{validation_steps}\OperatorTok{=}\VariableTok{None}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

以固定数量的轮次（数据集上的迭代）训练模型。

\textbf{Arguments}

\begin{itemize}
\tightlist
\item
  \textbf{x}: 训练数据的 Numpy 数组（如果模型只有一个输入）， 或者是
  Numpy 数组的列表（如果模型有多个输入）。
  如果模型中的输入层被命名，你也可以传递一个字典，将输入层名称映射到
  Numpy 数组。 如果从本地框架张量馈送（例如 TensorFlow 数据张量）数据，x
  可以是 \texttt{None}（默认）。
\item
  \textbf{y}: 目标（标签）数据的 Numpy 数组（如果模型只有一个输出），
  或者是 Numpy 数组的列表（如果模型有多个输出）。
  如果模型中的输出层被命名，你也可以传递一个字典，将输出层名称映射到
  Numpy 数组。 如果从本地框架张量馈送（例如 TensorFlow 数据张量）数据，y
  可以是 \texttt{None}（默认）。
\item
  \textbf{batch\_size}: 整数或
  \texttt{None}。每次梯度更新的样本数。如果未指定，默认为 32。
\item
  \textbf{epochs}: 整数。训练模型迭代轮次。一个轮次是在整个 \texttt{x}
  或 \texttt{y} 上的一轮迭代。 请注意，与 \texttt{initial\_epoch}
  一起，\texttt{epochs} 被理解为 「最终轮次」。模型并不是训练了
  \texttt{epochs} 轮，而是到第 \texttt{epochs} 轮停止训练。
\item
  \textbf{verbose}: 0, 1 或 2。日志显示模式。 0 = 安静模式, 1 = 进度条,
  2 = 每轮一行。
\item
  \textbf{callbacks}: 一系列的 \texttt{keras.callbacks.Callback}
  实例。一系列可以在训练时使用的回调函数。 详见
  \hyperref[callbacks]{callbacks}。
\item
  \textbf{validation\_split}: 在 0 和 1
  之间浮动。用作验证集的训练数据的比例。
  模型将分出一部分不会被训练的验证数据，并将在每一轮结束时评估这些验证数据的误差和任何其他模型指标。
  验证数据是混洗之前 \texttt{x} 和\texttt{y} 数据的最后一部分样本中。
\item
  \textbf{validation\_data}: 元组 \texttt{(x\_val，y\_val)} 或元组
  \texttt{(x\_val，y\_val，val\_sample\_weights)}，
  用来评估损失，以及在每轮结束时的任何模型度量指标。
  模型将不会在这个数据上进行训练。这个参数会覆盖
  \texttt{validation\_split}。
\item
  \textbf{shuffle}: 布尔值（是否在每轮迭代之前混洗数据）或者 字符串
  (\texttt{batch})。 \texttt{batch} 是处理 HDF5
  数据限制的特殊选项，它对一个 batch 内部的数据进行混洗。 当
  \texttt{steps\_per\_epoch} 非 \texttt{None} 时，这个参数无效。
\item
  \textbf{class\_weight}:
  可选的字典，用来映射类索引（整数）到权重（浮点）值，用于加权损失函数（仅在训练期间）。
  这可能有助于告诉模型 「更多关注」来自代表性不足的类的样本。
\item
  \textbf{sample\_weight}: 训练样本的可选 Numpy
  权重数组，用于对损失函数进行加权（仅在训练期间）。
  您可以传递与输入样本长度相同的平坦（1D）Numpy 数组（权重和样本之间的
  1：1 映射）， 或者在时序数据的情况下，可以传递尺寸为
  \texttt{(samples,\ sequence\_length)} 的 2D
  数组，以对每个样本的每个时间步施加不同的权重。
  在这种情况下，你应该确保在 \texttt{compile()} 中指定
  \texttt{sample\_weight\_mode="temporal"}。
\item
  \textbf{initial\_epoch}:
  整数。开始训练的轮次（有助于恢复之前的训练）。
\item
  \textbf{steps\_per\_epoch}: 整数或 \texttt{None}。
  在声明一个轮次完成并开始下一个轮次之前的总步数（样品批次）。 使用
  TensorFlow 数据张量等输入张量进行训练时，默认值 \texttt{None}
  等于数据集中样本的数量除以 batch 的大小，如果无法确定，则为 1。
\item
  \textbf{validation\_steps}: 只有在指定了
  \texttt{steps\_per\_epoch}时才有用。停止前要验证的总步数（批次样本）。
\end{itemize}

\textbf{返回}

一个 \texttt{History} 对象。其 \texttt{History.history} 属性是连续 epoch
训练损失和评估值，以及验证集损失和评估值的记录（如果适用）​​。

\textbf{异常}

\begin{itemize}
\tightlist
\item
  \textbf{RuntimeError}: 如果模型从未编译。
\item
  \textbf{ValueError}: 在提供的输入数据与模型期望的不匹配的情况下。
\end{itemize}



\subsubsubsection{evaluate}\label{evaluate}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{evaluate(}\VariableTok{self}\NormalTok{, x}\OperatorTok{=}\VariableTok{None}\NormalTok{, y}\OperatorTok{=}\VariableTok{None}\NormalTok{, batch_size}\OperatorTok{=}\VariableTok{None}\NormalTok{, verbose}\OperatorTok{=}\DecValTok{1}\NormalTok{, sample_weight}\OperatorTok{=}\VariableTok{None}, \\
\hspace{1cm}\NormalTok{steps}\OperatorTok{=}\VariableTok{None}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

在测试模式下返回模型的误差值和评估标准值。

计算是分批进行的。

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{x}: 测试数据的 Numpy 数组（如果模型只有一个输入）， 或者是
  Numpy 数组的列表（如果模型有多个输入）。
  如果模型中的输入层被命名，你也可以传递一个字典，将输入层名称映射到
  Numpy 数组。 如果从本地框架张量馈送（例如 TensorFlow 数据张量）数据，x
  可以是 \texttt{None}（默认）。
\item
  \textbf{y}: 目标（标签）数据的 Numpy 数组，或 Numpy
  数组的列表（如果模型具有多个输出）。
  如果模型中的输出层被命名，你也可以传递一个字典，将输出层名称映射到
  Numpy 数组。 如果从本地框架张量馈送（例如 TensorFlow 数据张量）数据，y
  可以是 \texttt{None}（默认）。
\item
  \textbf{batch\_size}: 整数或
  \texttt{None}。每次评估的样本数。如果未指定，默认为 32。
\item
  \textbf{verbose}: 0 或 1。日志显示模式。 0 = 安静模式，1 = 进度条。
\item
  \textbf{sample\_weight}: 测试样本的可选 Numpy
  权重数组，用于对损失函数进行加权。
  您可以传递与输入样本长度相同的扁平（1D）Numpy 数组（权重和样本之间的
  1：1 映射）， 或者在时序数据的情况下，传递尺寸为
  \texttt{(samples,\ sequence\_length)} 的 2D
  数组，以对每个样本的每个时间步施加不同的权重。
  在这种情况下，你应该确保在 \texttt{compile()} 中指定
  \texttt{sample\_weight\_mode="temporal"}。
\item
  \textbf{steps}: 整数或 \texttt{None}。
  声明评估结束之前的总步数（批次样本）。默认值 \texttt{None}。
\end{itemize}

\textbf{返回}

标量测试误差（如果模型只有一个输出且没有评估标准）
或标量列表（如果模型具有多个输出 和/或 评估指标）。 属性
\texttt{model.metrics\_names} 将提供标量输出的显示标签。



\subsubsubsection{predict}\label{predict}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{predict(}\VariableTok{self}\NormalTok{, x, batch_size}\OperatorTok{=}\VariableTok{None}\NormalTok{, verbose}\OperatorTok{=}\DecValTok{0}\NormalTok{, steps}\OperatorTok{=}\VariableTok{None}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

为输入样本生成输出预测。

计算是分批进行的

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{x}: 输入数据，Numpy 数组 （或者 Numpy
  数组的列表，如果模型有多个输出）。
\item
  \textbf{batch\_size}: 整数。如未指定，默认为 32。
\item
  \textbf{verbose}: 日志显示模式，0 或 1。
\item
  \textbf{steps}: 声明预测结束之前的总步数（批次样本）。默认值
  \texttt{None}。
\end{itemize}

\textbf{返回}

预测的 Numpy 数组（或数组列表）。

\textbf{异常}

\begin{itemize}
\tightlist
\item
  \textbf{ValueError}: 在提供的输入数据与模型期望的不匹配的情况下，
  或者在有状态的模型接收到的样本不是 batch size 的倍数的情况下。
\end{itemize}



\subsubsubsection{train\_on\_batch}\label{trainux5fonux5fbatch}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{train_on_batch(}\VariableTok{self}\NormalTok{, x, y, sample_weight}\OperatorTok{=}\VariableTok{None}\NormalTok{, class_weight}\OperatorTok{=}\VariableTok{None}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

运行一批样品的单次梯度更新。

\_\_参数\_

\begin{itemize}
\tightlist
\item
  \textbf{x}: 测试数据的 Numpy 数组（如果模型只有一个输入）， 或者是
  Numpy 数组的列表（如果模型有多个输入）。
  如果模型中的输入层被命名，你也可以传递一个字典，将输入层名称映射到
  Numpy 数组。
\item
  \textbf{y}: 目标（标签）数据的 Numpy 数组，或 Numpy
  数组的列表（如果模型具有多个输出）。
  如果模型中的输出层被命名，你也可以传递一个字典，将输出层名称映射到
  Numpy 数组。
\item
  \textbf{sample\_weight}: 可选数组，与 x
  长度相同，包含应用到模型损失函数的每个样本的权重。
  如果是时域数据，你可以传递一个尺寸为 (samples, sequence\_length) 的 2D
  数组， 为每一个样本的每一个时间步应用不同的权重。
  在这种情况下，你应该在 \texttt{compile()} 中指定
  \texttt{sample\_weight\_mode="temporal"}。
\item
  \textbf{class\_weight}:
  可选的字典，用来映射类索引（整数）到权重（浮点）值，以在训练时对模型的损失函数加权。
  这可能有助于告诉模型 「更多关注」来自代表性不足的类的样本。
\end{itemize}

\textbf{Returns}

标量训练误差（如果模型只有一个输入且没有评估标准），
或者标量的列表（如果模型有多个输出 和/或 评估标准）。 属性
\texttt{model.metrics\_names} 将提供标量输出的显示标签。



\subsubsubsection{test\_on\_batch}\label{testux5fonux5fbatch}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{test_on_batch(}\VariableTok{self}\NormalTok{, x, y, sample_weight}\OperatorTok{=}\VariableTok{None}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

在一批样本上测试模型。

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{x}: 测试数据的 Numpy 数组（如果模型只有一个输入）， 或者是
  Numpy 数组的列表（如果模型有多个输入）。
  如果模型中的输入层被命名，你也可以传递一个字典，将输入层名称映射到
  Numpy 数组。
\item
  \textbf{y}: 目标（标签）数据的 Numpy 数组，或 Numpy
  数组的列表（如果模型具有多个输出）。
  如果模型中的输出层被命名，你也可以传递一个字典，将输出层名称映射到
  Numpy 数组。
\item
  \textbf{sample\_weight}: 可选数组，与 x
  长度相同，包含应用到模型损失函数的每个样本的权重。
  如果是时域数据，你可以传递一个尺寸为 (samples, sequence\_length) 的 2D
  数组， 为每一个样本的每一个时间步应用不同的权重。
\end{itemize}

\textbf{返回}

标量测试误差（如果模型只有一个输入且没有评估标准），
或者标量的列表（如果模型有多个输出 和/或 评估标准）。 属性
\texttt{model.metrics\_names} 将提供标量输出的显示标签。



\subsubsubsection{predict\_on\_batch}\label{predictux5fonux5fbatch}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{predict_on_batch(}\VariableTok{self}\NormalTok{, x)}
\end{Highlighting}
\end{Shaded}

返回一批样本的模型预测值。

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{x}: 输入数据，Numpy 数组。
\end{itemize}

\textbf{返回}

预测值的 Numpy 数组（或数组列表）。



\subsubsubsection{fit\_generator}\label{fitux5fgenerator}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{fit_generator(}\VariableTok{self}\NormalTok{, generator, steps_per_epoch}\OperatorTok{=}\VariableTok{None}\NormalTok{, epochs}\OperatorTok{=}\DecValTok{1}\NormalTok{, verbose}\OperatorTok{=}\DecValTok{1}, \\
\hspace{2.5cm}\NormalTok{callbacks}\OperatorTok{=}\VariableTok{None}\NormalTok{, validation_data}\OperatorTok{=}\VariableTok{None}\NormalTok{, validation_steps}\OperatorTok{=}\VariableTok{None}, \\
\hspace{2.5cm}\NormalTok{class_weight}\OperatorTok{=}\VariableTok{None}\NormalTok{, max_queue_size}\OperatorTok{=}\DecValTok{10}\NormalTok{, workers}\OperatorTok{=}\DecValTok{1}, \\
\hspace{2.5cm}\NormalTok{use_multiprocessing}\OperatorTok{=}\VariableTok{False}\NormalTok{, shuffle}\OperatorTok{=}\VariableTok{True}\NormalTok{, initial_epoch}\OperatorTok{=}\DecValTok{0}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

使用 Python 生成器逐批生成的数据，按批次训练模型。

生成器与模型并行运行，以提高效率。 例如，这可以让你在 CPU
上对图像进行实时数据增强，以在 GPU 上训练模型。

\texttt{keras.utils.Sequence} 的使用可以保证数据的顺序， 以及当
\texttt{use\_multiprocessing=True} 时~，保证每个输入在每个 epoch
只使用一次。

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{generator}: 一个生成器，或者一个 \texttt{Sequence}
  (\texttt{keras.utils.Sequence}) 对象的实例，
  以在使用多进程时避免数据的重复。 生成器的输出应该为以下之一：
\item
  一个 (inputs, targets) 元组 ~- 一个 (inputs, targets, sample\_weights)
  元组。 这个元组（生成器的单个输出）组成了单个的 batch。
  因此，这个元组中的所有数组长度必须相同（与这一个 batch 的大小相等）。
  不同的 batch 可能大小不同。 例如，一个 epoch 的最后一个 batch
  往往比其他 batch 要小， 如果数据集的尺寸不能被 batch size 整除。
  生成器将无限地在数据集上循环。当运行到第 \texttt{steps\_per\_epoch}
  时，记一个 epoch 结束。
\item
  \textbf{steps\_per\_epoch}: 在声明一个 epoch 完成并开始下一个 epoch
  之前从 \texttt{generator} 产生的总步数（批次样本）。
  它通常应该等于你的数据集的样本数量除以批量大小。 对于
  \texttt{Sequence}，它是可选的：如果未指定，将使用\texttt{len(generator)}
  作为步数。
\item
  \textbf{epochs}: 整数，数据的迭代总轮数。
\item
  \textbf{verbose}: 日志显示模式。0，1 或 2。
\item
  \textbf{callbacks}: 在训练时调用的一系列回调函数。
\item
  \textbf{validation\_data}: 它可以是以下之一：
\item
  验证数据的生成器
\item
  一个 (inputs, targets) 元组
\item
  一个 (inputs, targets, sample\_weights) 元组。
\item
  \textbf{validation\_steps}: 仅当 \texttt{validation\_data}
  是一个生成器时才可用。 在停止前 \texttt{generator}
  生成的总步数（样本批数）。 对于
  \texttt{Sequence}，它是可选的：如果未指定，将使用
  \texttt{len(generator)} 作为步数。
\item
  \textbf{class\_weight}: 将类别索引映射为权重的字典。
\item
  \textbf{max\_queue\_size}: 整数。生成器队列的最大尺寸。
  如未指定，\texttt{max\_queue\_size} 将默认为 10。
\item
  \textbf{workers}: 整数。使用的最大进程数量，如果使用基于进程的多线程。
  如未指定，\texttt{workers} 将默认为 1。如果为
  0，将在主线程上执行生成器。
\item
  \textbf{use\_multiprocessing}: 布尔值。如果
  True，则使用基于进程的多线程。 如未指定， \texttt{workers} 将默认为
  False。
  请注意，由于此实现依赖于多进程，所以不应将不可传递的参数传递给生成器，因为它们不能被轻易地传递给子进程。
\item
  \textbf{shuffle}: 是否在每轮迭代之前打乱 batch 的顺序。 只能与
  \texttt{Sequence} (keras.utils.Sequence) 实例同用。
\item
  \textbf{initial\_epoch}: 开始训练的轮次（有助于恢复之前的训练）。
\end{itemize}

\textbf{返回}

一个 \texttt{History} 对象。

\textbf{例}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{def} \NormalTok{generate_arrays_from_file(path):}
    \ControlFlowTok{while} \DecValTok{1}\NormalTok{:}
        \NormalTok{f }\OperatorTok{=} \BuiltInTok{open}\NormalTok{(path)}
        \ControlFlowTok{for} \NormalTok{line }\OperatorTok{in} \NormalTok{f:}
            \CommentTok{# 从文件中的每一行生成输入数据和标签的 numpy 数组，}
            \NormalTok{x1, x2, y }\OperatorTok{=} \NormalTok{process_line(line)}
            \ControlFlowTok{yield} \NormalTok{(\{}\StringTok{'input_1'}\NormalTok{: x1, }\StringTok{'input_2'}\NormalTok{: x2\}, \{}\StringTok{'output'}\NormalTok{: y\})}
        \NormalTok{f.close()}

\NormalTok{model.fit_generator(generate_arrays_from_file(}\StringTok{'/my_file.txt'}\NormalTok{),}
                    \NormalTok{steps_per_epoch}\OperatorTok{=}\DecValTok{10000}\NormalTok{, epochs}\OperatorTok{=}\DecValTok{10}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

\textbf{异常}

\begin{itemize}
\tightlist
\item
  \textbf{ValueError}: 如果生成器生成的数据格式不正确。
\end{itemize}



\subsubsubsection{evaluate\_generator}\label{evaluateux5fgenerator}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{evaluate_generator(}\VariableTok{self}\NormalTok{, generator, steps}\OperatorTok{=}\VariableTok{None}\NormalTok{, max_queue_size}\OperatorTok{=}\DecValTok{10}\NormalTok{, workers}\OperatorTok{=}\DecValTok{1}, \\
\hspace{2.5cm}\NormalTok{use_multiprocessing}\OperatorTok{=}\VariableTok{False}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

在数据生成器上评估模型。

这个生成器应该返回与 \texttt{test\_on\_batch} 所接收的同样的数据。

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{generator}: 一个生成 (inputs, targets) 或 (inputs, targets,
  sample\_weights) 的生成器， 或一个 Sequence (keras.utils.Sequence)
  对象的实例，以避免在使用多进程时数据的重复。
\item
  \textbf{steps}: 在声明一个 epoch 完成并开始下一个 epoch 之前从
  \texttt{generator} 产生的总步数（批次样本）。
  它通常应该等于你的数据集的样本数量除以批量大小。 对于
  \texttt{Sequence}，它是可选的：如果未指定，将使用\texttt{len(generator)}
  作为步数。
\item
  \textbf{max\_queue\_size}: 生成器队列的最大尺寸。
\item
  \textbf{workers}: 整数。使用的最大进程数量，如果使用基于进程的多线程。
  如未指定，\texttt{workers} 将默认为 1。如果为
  0，将在主线程上执行生成器。
\item
  \textbf{use\_multiprocessing}: 布尔值。如果
  True，则使用基于进程的多线程。
  请注意，由于此实现依赖于多进程，所以不应将不可传递的参数传递给生成器，因为它们不能被轻易地传递给子进程。
\end{itemize}

\textbf{返回}

标量测试误差（如果模型只有一个输入且没有评估标准），
或者标量的列表（如果模型有多个输出 和/或 评估标准）。 属性
\texttt{model.metrics\_names} 将提供标量输出的显示标签。

\textbf{异常}

\begin{itemize}
\tightlist
\item
  \textbf{ValueError}: 如果生成器生成的数据格式不正确。
\end{itemize}



\subsubsubsection{predict\_generator}\label{predictux5fgenerator}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{predict_generator(}\VariableTok{self}\NormalTok{, generator, steps}\OperatorTok{=}\VariableTok{None}\NormalTok{, max_queue_size}\OperatorTok{=}\DecValTok{10}\NormalTok{, workers}\OperatorTok{=}\DecValTok{1}, \\
\hspace{2.5cm}\NormalTok{use_multiprocessing}\OperatorTok{=}\VariableTok{False}\NormalTok{, verbose}\OperatorTok{=}\DecValTok{0}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

为来自数据生成器的输入样本生成预测。

这个生成器应该返回与 \texttt{predict\_on\_batch} 所接收的同样的数据。

\textbf{参数}

\begin{itemize}
\item
  \textbf{generator}: 生成器，返回批量输入样本， 或一个 Sequence
  (keras.utils.Sequence) 对象的实例，以避免在使用多进程时数据的重复。
\item
  \textbf{steps}: 在声明一个 epoch 完成并开始下一个 epoch 之前从
  \texttt{generator} 产生的总步数（批次样本）。
  它通常应该等于你的数据集的样本数量除以批量大小。 对于
  \texttt{Sequence}，它是可选的：如果未指定，将使用\texttt{len(generator)}
  作为步数。
\item
  \textbf{max\_queue\_size}: 生成器队列的最大尺寸。
\item
  \textbf{workers}: 整数。使用的最大进程数量，如果使用基于进程的多线程。
  如未指定，\texttt{workers} 将默认为 1。如果为
  0，将在主线程上执行生成器。
\item
  \textbf{use\_multiprocessing}: 如果 True，则使用基于进程的多线程。
  请注意，由于此实现依赖于多进程，所以不应将不可传递的参数传递给生成器，因为它们不能被轻易地传递给子进程。
\item
  \textbf{verbose}: 日志显示模式，0 或 1。
\end{itemize}

\textbf{返回}

预测值的 Numpy 数组（或数组列表）。

\textbf{异常}

\begin{itemize}
\tightlist
\item
  \textbf{ValueError}: 如果生成器生成的数据格式不正确。
\end{itemize}



\subsubsubsection{get\_layer}\label{getux5flayer}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{get_layer(}\VariableTok{self}\NormalTok{, name}\OperatorTok{=}\VariableTok{None}\NormalTok{, index}\OperatorTok{=}\VariableTok{None}\NormalTok{)}
\end{Highlighting}
\end{Shaded}

根据名称（唯一）或索引值查找网络层。

索引值来自于水平图遍历的顺序（自下而上）。

\textbf{参数}

\begin{itemize}
\tightlist
\item
  \textbf{name}: 字符串，层的名字。
\item
  \textbf{index}: 整数，层的索引。
\end{itemize}

\textbf{返回}

一个层实例。

\textbf{异常}

\begin{itemize}
\tightlist
\item
  \textbf{ValueError}: 如果层的名称或索引不正确。
\end{itemize}
\newpage
